package com.fc.redap.service.impl;

import com.fc.redap.dao.*;
import com.fc.redap.entity.*;
import com.fc.redap.helper.DateTimeHelper;
import com.fc.redap.service.IProjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("projectService")
public class ProjectServiceImpl extends BaseServiceImpl<ProjectEntity> implements IProjectService {
    @Autowired
    private ProjectDao projectDao;

    @Autowired
    private ProjectIntroImageDao projectIntroImageDao;

    @Autowired
    private ProjectScenicZoneDao projectScenicZoneDao;

    @Autowired
    private ProjectBookedUserDao projectBookedUserDao;

    @Autowired
    private ScenicZoneDao scenicZoneDao;

    @Override
    public BaseDao getDao()
    {
        return projectDao;
    }

    public void save(ProjectEntity projectEntity)
    {
        // 保存旅游项目基本信息
        projectEntity.setCreateTime(DateTimeHelper.getCurrentDay());
        projectDao.save(projectEntity);

        if(projectEntity.getId() != null)
        {
            // 保存旅游项目的介绍图片
//            projectIntroImageDao.deleteByProjectId(projectEntity.getId());
            if(projectEntity.getIntroImages() != null && !projectEntity.getIntroImages().isEmpty())
            {
                for(ProjectIntroImageEntity imageEntity : projectEntity.getIntroImages())
                {
                    imageEntity.setProjectId(projectEntity.getId());
                    projectIntroImageDao.save(imageEntity);
                }
            }

            List<ScenicZoneEntity> zones = scenicZoneDao.queryList(null);

            // 保持旅游项目的景点地址
            if(projectEntity.getScenicZones() != null && !projectEntity.getScenicZones().isEmpty())
            {
                for(ProjectScenicZoneEntity scenicZoneEntity : projectEntity.getScenicZones())
                {
                    for(ScenicZoneEntity zone : zones){
                        if(scenicZoneEntity.getScenicId() == zone.getId()){
                            scenicZoneEntity.setRemark(zone.getRemark());
                            break;
                        }
                    }
                    scenicZoneEntity.setProjectId(projectEntity.getId());
                    projectScenicZoneDao.save(scenicZoneEntity);
                }
            }
        }
    }

    public void update(ProjectEntity projectEntity)
    {
        // 保存旅游项目基本信息
        projectEntity.setUpdateTime(DateTimeHelper.getCurrentDay());
        projectDao.update(projectEntity);

        if(projectEntity.getId() != null)
        {
            // 保存旅游项目的介绍图片
            projectIntroImageDao.deleteByProjectId(projectEntity.getId()); // 删除原来的关系
            if(projectEntity.getIntroImages() != null && !projectEntity.getIntroImages().isEmpty())
            {
                for(ProjectIntroImageEntity imageEntity : projectEntity.getIntroImages())
                {
                    imageEntity.setProjectId(projectEntity.getId());
                    projectIntroImageDao.save(imageEntity);
                }
            }

            // 保持旅游项目的景点地址
            projectScenicZoneDao.deleteByProjectId(projectEntity.getId()); // 删除原来的关系
            List<ScenicZoneEntity> zones = scenicZoneDao.queryList(null);
            if(projectEntity.getScenicZones() != null && !projectEntity.getScenicZones().isEmpty())
            {
                for(ProjectScenicZoneEntity scenicZoneEntity : projectEntity.getScenicZones())
                {
                    for(ScenicZoneEntity zone : zones){
                        if(scenicZoneEntity.getScenicId() == zone.getId()){
                            scenicZoneEntity.setRemark(zone.getRemark());
                            break;
                        }
                    }
                    scenicZoneEntity.setProjectId(projectEntity.getId());
                    projectScenicZoneDao.save(scenicZoneEntity);
                }
            }
        }

    }

    @Override
    public ProjectEntity getProjectInfoById(Long projectId) {
        if(projectId == null)
        {
            return null;
        }

        ProjectEntity projectEntity = projectDao.queryObject(projectId);
        if(projectEntity != null)
        {
            Map<String, Long> params = new HashMap<>();
            params.put("projectId", projectEntity.getId());
            List<ProjectIntroImageEntity> introImageEntityList = projectIntroImageDao.queryList(params);
            projectEntity.setIntroImages(introImageEntityList);

            List<ProjectScenicZoneEntity> scenicZoneEntityList = projectScenicZoneDao.queryList(params);
            projectEntity.setScenicZones(scenicZoneEntityList);

            List<ProjectBookedUserEntity> bookedUsers = projectBookedUserDao.queryList(params);
            projectEntity.setBookedUsers(bookedUsers);
        }
        return projectEntity;
    }
}
